#------------------------------------------------------------------------------
#- Archivo:                         Makefile
#- Fecha de creacion:               13/01/2011
#- Ultima fecha de modificacion:    05/02/2011
#- Diseñador:                       Liliana Andrade
#- Diseño:                          Makefile
#- Proposito:                       Compilar  los  archivos  y  generar  los
#-                                  resultados desde alliance
#------------------------------------------------------------------------------

ALLIANCE_TOP = /opt/alliance-5.0

ENV_ASIMUT = MBK_CATAL_NAME=CATAL_ASIMUT

ENV_COUGAR = MBK_SPI_MODEL=$(ALLIANCE_TOP)/etc/spimodel.cfg ;\
		          export MBK_SPI_MODEL;\
		          MBK_IN_PH=ap ;\
		          export MBK_IN_PH;\
		          MBK_OUT_LO=spi;\
		          export MBK_OUT_LO

INPUT_FILES = alu.vhdl mux2to1.vhdl mux4to1.vhdl reg_1bit.vhdl sumador.vhdl \
sum_encauzado.vhdl banderas.vhdl celda_multiplicadora.vhdl ffd.vhdl \
multiplicador_encauzado.vhdl pipem.vhdl lu.vhdl mlu.vhdl

OBJECTIVES = translate check-behavioral synthesis place_and_route transistors


#-****************************************************************************-
#                                      all
#-****************************************************************************-

all: $(OBJECTIVES)


#-****************************************************************************-
#                                   translate
#-****************************************************************************-

translate: alu.vst alu_model.vbe

alu.vst alu_model.vbe: $(INPUT_FILES)
	vasy -Vaop -I vhdl -H alu
	touch translate


#-****************************************************************************-
#                                 check-behavioral
#-****************************************************************************-

check-behavioral: translate test_alu.pat result_alu.pat view-behavioral

test_alu.pat: test_alu.c
	genpat test_alu

result_alu.pat: alu.vst test_alu.pat
	$(ENV_ASIMUT) asimut alu test_alu result_alu
	touch check-behavioral

view-behavioral: result_alu.pat
	xpat -l result_alu


#-****************************************************************************-
#                                     syntesis
#-****************************************************************************-

synthesis: alu_model.vst reg_1bit.vst sumador.vst \
sum_encauzado_model.vst celda_multiplicadora.vst ffd.vst \
pipem_model.vst multiplicador_encauzado_model.vst lu_model.vst \
mux4to1.vst mlu.vst banderas.vst mux2to1.vst


# -----------------------------------------------------------------------------
#                                       boom
# -----------------------------------------------------------------------------

alu_model_boom.vbe: alu_model.vbe
	boom alu_model alu_model_boom

mux2to1_boom.vbe: mux2to1.vbe
	boom mux2to1 mux2to1_boom

# ------- sumador
reg_1bit_boom.vbe: reg_1bit.vbe
	boom -i 10 -d 0 reg_1bit reg_1bit_boom

sumador_boom.vbe: sumador.vbe
	boom -i 10 -d 0 sumador sumador_boom

sum_encauzado_model_boom.vbe: sum_encauzado_model.vbe
	boom -i 10 -d 0 sum_encauzado_model sum_encauzado_model_boom

# ------- multiplicador
celda_multiplicadora_boom.vbe: celda_multiplicadora.vbe
	boom -i 10 -d 0 celda_multiplicadora celda_multiplicadora_boom

pipem_model_boom.vbe: pipem_model.vbe
	boom -i 10 -d 0 pipem_model pipem_model_boom

ffd_boom.vbe: ffd.vbe
	boom -i 10 -d 0 ffd ffd_boom

multiplicador_encauzado_model_boom.vbe: multiplicador_encauzado_model.vbe
	boom -i 10 -d 0 multiplicador_encauzado_model \
multiplicador_encauzado_model_boom

# ------- unidad logica
lu_model_boom.vbe: lu_model.vbe
	boom lu_model lu_model_boom

mux4to1_boom.vbe: mux4to1.vbe
	boom mux4to1 mux4to1_boom

mlu_boom.vbe: mlu.vbe
	boom mlu mlu_boom

# ------- banderas
banderas_boom.vbe: banderas.vbe
	boom banderas banderas_boom


# -----------------------------------------------------------------------------
#                                       boog
# -----------------------------------------------------------------------------

alu_model_boog.vst: alu_model_boom.vbe
	boog alu_model_boom alu_model_boog

mux2to1_boog.vst: mux2to1_boom.vbe
	boog mux2to1_boom mux2to1_boog

# ------- sumador
sumador_boog.vst: sumador_boom.vbe
	boog sumador_boom sumador_boog

reg_1bit_boog.vst: reg_1bit_boom.vbe
	boog reg_1bit_boom reg_1bit_boog

sum_encauzado_model_boog.vst: sum_encauzado_model_boom.vbe
	boog sum_encauzado_model_boom sum_encauzado_model_boog

# ------- multiplicador
celda_multiplicadora_boog.vst: celda_multiplicadora_boom.vbe
	boog celda_multiplicadora_boom celda_multiplicadora_boog

ffd_boog.vst: ffd_boom.vbe
	boog ffd_boom ffd_boog

pipem_model_boog.vst: pipem_model_boom.vbe
	boog pipem_model_boom pipem_model_boog

multiplicador_encauzado_model_boog.vst: multiplicador_encauzado_model_boom.vbe
	boog multiplicador_encauzado_model_boom \
multiplicador_encauzado_model_boog

# ------- unidad logica
lu_model_boog.vst: lu_model_boom.vbe
	boog lu_model_boom lu_model_boog

mux4to1_boog.vst: mux4to1_boom.vbe
	boog mux4to1_boom mux4to1_boog

mlu_boog.vst: mlu_boom.vbe
	boog mlu_boom mlu_boog

# ------- banderas
banderas_boog.vst: banderas_boom.vbe
	boog banderas_boom banderas_boog


# -----------------------------------------------------------------------------
#                                       loon
# -----------------------------------------------------------------------------

alu_model.vst: alu_model_boog.vst
	loon alu_model_boog alu_model

mux2to1.vst: mux2to1_boog.vst
	loon mux2to1_boog mux2to1

# ------- sumador
sumador.vst: sumador_boog.vst
	loon sumador_boog sumador

reg_1bit.vst: reg_1bit_boog.vst
	loon reg_1bit_boog reg_1bit

sum_encauzado_model.vst: sum_encauzado_model_boog.vst
	loon sum_encauzado_model_boog sum_encauzado_model

# ------- multiplicador
celda_multiplicadora.vst: celda_multiplicadora_boog.vst
	loon celda_multiplicadora_boog celda_multiplicadora

ffd.vst: ffd_boog.vst
	loon ffd_boog ffd

pipem_model.vst: pipem_model_boog.vst
	loon pipem_model_boog pipem_model

multiplicador_encauzado_model.vst: multiplicador_encauzado_model_boog.vst
	loon multiplicador_encauzado_model_boog \
multiplicador_encauzado_model

# ------- unidad logica
lu_model.vst: lu_model_boog.vst
	loon lu_model_boog lu_model

mux4to1.vst: mux4to1_boog.vst
	loon mux4to1_boog mux4to1

mlu.vst: mlu_boog.vst
	loon mlu_boog mlu

# ------- banderas
banderas.vst: banderas_boog.vst
	loon banderas_boog banderas
	touch synthesis


# -----------------------------------------------------------------------------
view-gates: alu.vst alu_model.vst sumador.vst reg_1bit.vst \
sum_encauzado_model.vst celda_multiplicadora.vst ffd.vst \
pipem_model.vst multiplicador_encauzado_model.vst lu_model.vst \
mux4to1.vst mlu.vst banderas.vst mux2to1.vst
	xsch -l alu


#-****************************************************************************-
#                                  place and route
#-****************************************************************************-

place_and_route: synthesis alu_ocp.ap alu_nero.ap alu_s2r.cif view-place \
	view-route view-real


alu_ocp.ap: alu.vst
	ocp -v -ring alu alu_ocp

alu_nero.ap: alu_ocp.ap alu.vst
	nero -Vp alu_ocp alu alu_nero

alu_s2r.cif: alu_nero.ap
	s2r alu_nero alu_s2r
	touch place_and_route


view-place: synthesis alu_ocp.ap
	graal -l alu_ocp

view-route: synthesis alu_nero.ap
	graal -l alu_nero

view-real: synthesis alu_s2r.cif
	dreal -l alu_s2r


#-****************************************************************************-
#                                  transistors
#-****************************************************************************-

transistors: alu_transistors.spi view-transistors

alu_transistors.spi: alu_nero.ap
	$(ENV_COUGAR); cougar -t alu_nero alu_transistors
	touch transistors

view-transistors: alu_transistors.spi
	$(ENV_COUGAR); xsch -I spi -l alu_transistors


#-****************************************************************************-
#                                     clean
#-****************************************************************************-
clean:
	rm -rf	*~ \
	*.vbe \
	*.vst \
 	*.ap \
	*.cif \
	*.xsc \
	*.pat \
	*.spi \
	*.dat \
	$(OBJECTIVES) \
	*#
